package com.fau.cm.service;

import java.util.List;
import java.util.Map;

import org.apache.poi.ss.usermodel.Workbook;

import com.fau.cm.entity.MedicalAdmin;
import com.fau.cm.entity.MedicalCallCustomer;
import com.fau.cm.entity.MedicalCallEnd;
import com.fau.cm.entity.MedicalCallPending;
import com.fau.cm.entity.MedicalCallStandardArchives;
import com.fau.cm.entity.MedicalCallTelInfo;
import com.fau.cm.entity.MedicalCallUntreated;
import com.fau.cm.entity.MedicalKeyValue;
import com.fau.cm.util.Page;

/**
 * @desc 我的话务管理接口
 * @author kangyj
 * @datetime 2014年11月3日,下午12:05:41
 */
public interface ICallMyManagerService {
	
	/**
	 * @desc 分页查询未处理话务任务
	 * @param callUntreated 未处理话务任务
	 * @param admin 当前登录用户
	 * @param map 分页参数
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月26日,下午5:55:20
	 */
	public Page findCallUntreatedByPage(MedicalCallUntreated callUntreated, MedicalAdmin admin, Map<String, Object> map);
	
	/**
	 * @desc 分页查询待处理话务任务
	 * @param callPending 待处理话务任务
	 * @param admin 当前登录用户
	 * @param map 分页参数
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月26日,下午5:58:19
	 */
	public Page findCallPendingByPage(MedicalCallPending callPending, MedicalAdmin admin, Map<String, Object> map);
	
	/**
	 * @desc 分页查询已结束话务任务
	 * @param callEnd 已结束话务任务
	 * @param admin 当前登录用户
	 * @param map 分页参数
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月26日,下午5:59:56
	 */
	public Page findCallEndByPage(MedicalCallEnd callEnd, MedicalAdmin admin, Map<String, Object> map);
	
	/**
	 * @desc 批量修改话务任务类别--未处理任务
	 * @param callIds
	 * @param categoryKey
	 * @author kangyj
	 * @datetime 2014年10月23日,下午2:24:41
	 */
	public void editCallUntreatedCategory(String callIds, String categoryKey);
	
	/**
	 * @desc 批量修改话务任务类别--待处理任务
	 * @param callIds
	 * @param categoryKey
	 * @author kangyj
	 * @datetime 2014年10月23日,下午2:24:41
	 */
	public void editCallPendingCategory(String callIds, String categoryKey);
	
	/**
	 * @desc 批量修改话务任务类别--已结束任务
	 * @param callIds
	 * @param categoryKey
	 * @author kangyj
	 * @datetime 2014年10月23日,下午2:24:41
	 */
	public void editCallEndCategory(String callIds, String categoryKey);
	
	/**
	 * @desc 我的话务管理--未处理任务修改状态
	 * @param callIds 待修改状态任务id
	 * @param statusKey 将要修改为的状态值
	 * @param groupId 组id
	 * @param handleUserId 任务处理者id
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月25日,下午11:30:46
	 */
	public void editCallUntreatedSta(String callIds, String statusKey, String groupId, String handleUserId);
	
	/**
	 * @desc 我的话务管理--待处理任务修改状态
	 * @param callIds 待修改状态任务id
	 * @param statusKey 将要修改为的状态值
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月25日,下午11:30:46
	 */
	public void editCallPendingSta(String callIds, String statusKey, String groupId, String handleUserId);
	
	/**
	 * @desc 批量删除--未处理话务任务
	 * @param callUntreated 待删除话务任务
	 * @author kangyj
	 * @datetime 2014年10月19日,下午6:37:57
	 */
	public void delUntreatedCall(MedicalCallUntreated callUntreated);
	
	/**
	 * @desc 批量删除--待处理话务任务
	 * @param callPending 待删除话务任务
	 * @author kangyj
	 * @datetime 2014年10月19日,下午6:37:57
	 */
	public void delPendingCall(MedicalCallPending callPending);
	
	/**
	 * @desc 批量删除--已结束话务任务
	 * @param callEnd 待删除话务任务
	 * @author kangyj
	 * @datetime 2014年10月19日,下午6:37:57
	 */
	public void delEndCall(MedicalCallEnd callEnd);
	
/*------------------------------------------打开任务处理------------------------------------------------*/
	
	/**
	 * @desc 打开任务根据任务id 查询电话数据
	 * @param callId 任务id
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月4日,上午12:37:26
	 */
	public List<MedicalCallTelInfo> findTelInfoByCid(String callId);
	
	/**
	 * @desc 保存电话信息
	 * @param telInfo 电话实体类
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月4日,上午12:49:05
	 */
	public void saveTelInfo(MedicalCallTelInfo telInfo);
	
	/**
	 * @desc 保存编辑电话信息
	 * @param telInfo
	 * @author kangyj
	 * @datetime 2014年11月4日,上午12:51:28
	 */
	public void editSaveTelInfo(MedicalCallTelInfo telInfo);
	
	/**
	 * @desc 删除电话信息
	 * @param telInfo
	 * @author kangyj
	 * @datetime 2014年11月4日,上午12:50:15
	 */
	public void delTelInfo(MedicalCallTelInfo telInfo);
	
	/**
	 * @desc 查询主要号码
	 * @param customerId
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月21日,下午4:48:23
	 */
	public List<String> findMainNo(String customerId);
	
	/**
	 * @desc 根据客户id 查询客户手机号（发短信使用）
	 * @param cId 客户id
	 * @return
	 * @author kangyj
	 * @datetime 2014年12月5日,下午2:54:20
	 */
	public List<MedicalCallTelInfo> findCustomerPhoneNums(String cId);
	
	/**
	 * @desc 更新推荐客户号码客户id、任务id
	 * @param telInfo
	 * @author kangyj
	 * @datetime 2014年12月6日,上午11:07:32
	 */
	public void recommendTelEdit(MedicalCallTelInfo telInfo);
	
	/**
	 * @desc 根据客户id查询客户所有号码
	 * @param cId 客户id
	 * @return List<MedicalCallTelInfo>
	 * @author kangyj
	 * @datetime 2014年12月6日,下午2:20:51
	 */
	public List<MedicalCallTelInfo> findAllTelInfoByCid(String cId);
	
	/**
	 * @desc 保存推荐客户生成话务任务
	 * @param admin 当前用户
	 * @author kangyj
	 * @datetime 2014年12月5日,下午11:56:40
	 */
	public String saveRecommendCall(MedicalAdmin admin);
	
	/**
	 * @desc 更新推荐客户生成的任务的相关号码
	 * @param phoneNum 
	 * @param callId
	 * @return
	 * @author kangyj
	 * @datetime 2015年1月21日,下午3:00:03
	 */
	public void updateReCallNum(String phoneNum, String callId);
	
	/**
	 * @desc 推荐客户信息未保存，删除打开弹窗生成的任务
	 * @param customer
	 * @author kangyj
	 * @datetime 2015年1月21日,下午3:50:04
	 */
	public void delRecommend(MedicalCallCustomer customer);
	
	/**
	 * @desc 批量加入黑名单
	 * @author liy
	 * @datetime 2014年12月11日,下午9:29:14
	 */
	public void updateCustomerBlack(String ids);
	
	/**
	 * @desc 批量移出黑名单
	 * @param ids 
	 * @author liy
	 * @datetime 2014年12月11日,下午11:11:40
	 */
	public void updateCustomerBlackOut(String ids);
	
	/**
	 * @desc 生成健康报告
	 * @param result 
	 * @author liy
	 * @datetime 2014年12月12日,下午4:08:22
	 */
	public List<MedicalCallStandardArchives> createHealthResult(String result);
	
	/**
	 * @desc 导出全部-未处理
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月6日,上午10:02:39
	 */
	public Workbook untExportAll(MedicalAdmin admin,MedicalCallUntreated call) throws Exception;
	
	/**
	 * @desc 导出当前-未处理
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月6日,上午10:03:37
	 */
	public Workbook untExportCurrent(String id) throws Exception;
	
	/**
	 * @desc 导出全部-待处理
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月6日,上午11:14:27
	 */
	public Workbook penExportAll(MedicalAdmin admin,MedicalCallPending call) throws Exception;
	
	/**
	 * @desc 导出当前-待处理
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月6日,上午11:15:10
	 */
	public Workbook penExportCurrent(String id) throws Exception;
	
	/**
	 * @desc 导出全部-已结束
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月6日,上午11:26:21
	 */
	public Workbook endExportAll(MedicalAdmin admin,MedicalCallEnd call) throws Exception;
	
	/**
	 * @desc 导出当前-已结束
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月6日,上午11:26:58
	 */
	public Workbook endExportCurrent(String id) throws Exception;
	
	/**
	 * @desc 查询话务员可以修改的话务状态
	 * @param admin 当前登录用户
	 * @param typeName 字典类型
	 * @return
	 * @author kangyj
	 * @datetime 2015年1月16日,下午4:54:55
	 */
	public List<MedicalKeyValue> findCallStatusKey(MedicalAdmin admin, String typeName);
	
	/**
	 * @desc 打开任务修改状态
	 * @param admin	当前登录用户
	 * @param callUnt 未处理任务实体类（用于传递参数）
	 * @author kangyj
	 * @datetime 2015年1月26日,上午11:36:07
	 */
	public void editCallStatus(MedicalAdmin admin, MedicalCallUntreated callUnt);
	
	/**
	 * @desc 验证号码是否已存在其他任务中
	 * @param telInfo
	 * @return
	 * @author kangyj
	 * @datetime 2015年2月8日,下午5:55:52
	 */
	public String validNumUnique(MedicalCallTelInfo telInfo);
	
	/**
	 * @desc 查询任务状态
	 * @param callId 任务id
	 * @return
	 * @author kangyj
	 * @datetime 2015年2月8日,下午5:56:51
	 */
	public String findCallStatus(String callId);
	
	/**
	 * @desc 合并号码，将当前任务号码合并到老任务中
	 * @param callStatus 当前任务状态
	 * @param callId 当前任务id
	 * @param openCallId 将要打开的任务id
	 * @author kangyj
	 * @datetime 2015年2月9日,下午4:22:47
	 */
	public void mergePhone(String callStatus, String callId, String openCallId);
	
	/**
	 * @desc 任务客户信息存在，合并任务
	 * @param callStatus 状态
	 * @param callId 当前打开的任务id
	 * @param customerId 当前打开任务的客户id
	 * @param openCallId 将打开的任务
	 * @author kangyj
	 * @datetime 2015年2月9日,下午11:49:18
	 */
	public void mergeCall(String callStatus, String callId, String customerId, String openCallId);
	
	/**
	 * @desc 客户管理新增客户，添加客户电话
	 * @param telInfo void
	 * @author kangyj
	 * @datetime 2015年4月16日,下午6:01:30
	 */
	public void saveNewTelInfo(MedicalCallTelInfo telInfo);
	
	/**
	 * @desc 客户管理新增客户，修改客户电话
	 * @param telInfo void
	 * @author kangyj
	 * @datetime 2015年4月16日,下午6:01:50
	 */
	public void editNewTelInfo(MedicalCallTelInfo telInfo);
	
	/**
	 * @desc 客户管理新增客户，删除客户电话
	 * @param telInfo void
	 * @author kangyj
	 * @datetime 2015年4月16日,下午6:02:02
	 */
	public void delNewTelInfo(MedicalCallTelInfo telInfo);
	
}
